<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // JavaScript 所有数字都保存成 64 位浮点数，这给数值的表示带来了两大限制。一是数值的精度只能到 53 个二进制位（相当于 16 个十进制位），大于这个范围的整数，JavaScript 是无法精确表示，这使得 JavaScript 不适合进行科学和金融方面的精确计算。二是大于或等于2的1024次方的数值，JavaScript 无法表示，会返回Infinity。

    // console.log(Math.pow(2, 53));
    // console.log(Math.pow(2, 53)+1);
    // console.log(Math.pow(2, 53) === Math.pow(2, 53) + 1) // true;

    // console.log(Math.pow(2, 1024));
    // console.log(1 / 0);


    // ES2020 引入了一种新的数据类型 BigInt（大整数），来解决这个问题，这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数，没有位数的限制，任何位数的整数都可以精确表示。

    // 创建大整数BigInt  为了与 Number 类型区别，BigInt 类型的数据必须添加后缀n。
    const a = 2172141653n;
    const b = 15346349309n;
    console.log(a,b);

    //  BigInt 可以保持精度
    console.log(a * b);


    // BigInt 转化为整数  => Number() 
    console.log(Number(a));
    console.log(Number(b));
    console.log(Number(a) * Number(b));



</script>
</html>